package com.lwl.blue.seven.constants;

/**
 * 合同状态枚举
 * @author system
 * @since 2025-09-17
 */
public enum ContractStatus {
    /**
     定义合同状态及描述（状态码，描述）
     */
    DRAFT(10, "准备"),
    REJECTED(11, "驳回"), 
    MODIFIED(15, "修改"),
    PENDING_AUDIT(30, "待审"),
    EXECUTING(70, "执行"),
    COMPLETED(80, "完结");
    
    private final Integer code;
    private final String name;
    
    ContractStatus(Integer code, String name) {
        this.code = code;
        this.name = name;
    }

    /**
     提供状态码和获取的方法
     */

    public Integer getCode() {
        return code;
    }
    
    public String getName() {
        return name;
    }


    /**
     * 根据状态码获取状态名称
     */
    public static String getNameByCode(Integer code) {
        if (code == null) {
            return "";
        }
        for (ContractStatus status : values()) {
            if (status.getCode().equals(code)) {
                return status.getName();
            }
        }
        return "";
    }
    
    /**
     * 根据状态码获取枚举实例
     */
    public static ContractStatus getByCode(Integer code) {
        if (code == null) {
            return null;
        }
        for (ContractStatus status : values()) {
            if (status.getCode().equals(code)) {
                return status;
            }
        }
        return null;
    }

    
    /**
     * 通过传入的code判断是否可以编辑（草稿或驳回状态和修改状态）
     */
    public static boolean canEdit(Integer status) {
        return DRAFT.getCode().equals(status) || REJECTED.getCode().equals(status)|| MODIFIED.getCode().equals(status);
    }
    
    /**
     * 判断是否可以删除（仅草稿状态和驳回状态和修改状态）
     */
    public static boolean canDelete(Integer status) {
        return DRAFT.getCode().equals(status) || REJECTED.getCode().equals(status)|| MODIFIED.getCode().equals(status);
    }
    
    /**
     * 判断是否可以提交审批（草稿状态和驳回状态和修改状态）
     */
    public static boolean canSubmit(Integer status) {
        return DRAFT.getCode().equals(status) || REJECTED.getCode().equals(status) || MODIFIED.getCode().equals(status);
    }
    
    /**
     * 判断是否可以审核（待审状态）
     */
    public static boolean canAudit(Integer status) {
        return PENDING_AUDIT.getCode().equals(status);
    }

    /**
     * 判断是否可以完成（仅执行状态）
     */
    public static boolean canComplete(Integer status) {
        return EXECUTING.getCode().equals(status);
    }
}

